GDK W32: Don't handle WM_ACTIVATE for popup windows
authorРуслан Ижбулатов <lrn1986@gmail.com>
Mon, 27 May 2019 23:51:38 +0000 (23:51 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 28 May 2019 20:25:17 +0000 (20:25 +0000)
Popups can't be active or inactive, so emitting GDK events
in response to WM_ACTIVATE makes no sense for these kinds
of GDK surfaces.

The jury is still out on whether we should block (return 0)
or ignore (don't return anything) this message.

Blocking WM_NCACTIVATE (which we currently ignore) is definitely
not an option - it completely breaks input somehow.

gdk/win32/gdkevents-win32.c

index 126177e4e5f49e4880a0996f552e79064a51bf69..1a8b86c335ff858f8e19d18fef47fa3e97ad07d9 100644 (file)
@@ -3430,6 +3430,16 @@ gdk_event_translate (MSG  *msg,
                                   (LOWORD (msg->wParam) == WA_INACTIVE ? "INACTIVE" : "???"))),
                                 HIWORD (msg->wParam) ? " minimized" : "",
                                 (HWND) msg->lParam));
+      if (window->surface_type == GDK_SURFACE_POPUP)
+        {
+          /* Popups cannot be activated or de-activated - 
+           * they only support keyboard focus, which GTK
+           * will handle for us.
+           */
+          *ret_valp = 0;
+          return_val = TRUE;
+          break;
+        }
       /* We handle mouse clicks for modally-blocked windows under WM_MOUSEACTIVATE,
        * but we still need to deal with alt-tab, or with SetActiveWindow() type
        * situations.